<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>

<body>
  <script>
    // promise（承诺）
    // 异步编程的一种解决方案
    // 可以将异步操作以同步操作的流程表达出来，避免了层层嵌套的回调函数
    // 解决了传统的 回调函数和事件方式 导致的 回调地狱问题
    // 有兼容解决方案。

    //     是一个容器，里面保存着 异步操作的  结果 （成功返回值，失败消息/失败的原因）
    // -- 语法层面解释 ：Promise 是一个对象，从它可以获取异步操作的消息（成功返回值，失败消息/失败的原因）
    //      Promise是一个构造函数
    //      promise 特点/优点
    //       1）对象的状态不受外界的影响  (三种状态)
    //           状态：pending（进行中）、fulfilled（已成功）、rejected（已失败）
    //           只有异步操作的结果，可以决定当前是哪一种状态，任何其他操作都无法改变这个状态。

    //     2）一旦状态改变，就不会再变，任何时候都可以得到这个结果。 （2个结果）
    //     状太改变 2种情况：
    //     pending（进行中）变为 fulfilled（已成功） --- resolved
    //     pending（进行中）变为 rejected（已失败） --- rejected

    //     缺点：
    //   1、一旦新建它就会 立即执行 ，无法取消Promise
    //   2、如果不设置回调函数，Promise内部抛出的错误，不会反应到外部
    //   3、当处于pending状态时，
    //   无法得知目前进展到哪一个阶段（刚刚开始还是即将完成）。
    var age = 17;
    var p = new Promise((resolve, reject) => {
      // resolve 成功的回调
      if (age > 18) {
        resolve({ success: "成功", veri: "1234" })
      } else {
        // reject  失败的调用
        reject({ err: "失败了" })
      }
    })
    //2.调用 then() 成功的回调  catch 失败的回调
    p.then((res) => {
      console.log(res)
    }).catch(errRes => {
      console.log(errRes)
    })




  </script>
</body>

</html>